home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Newsletters / GEnieUnixNews / unxnl-08.91 < prev    next >
Text File  |  1992-12-27  |  24KB  |  597 lines

  1.  
  2.           _ __  _   _ __ _ __
  3.          // /  //| // || \\|     N E W S
  4.         //_/  // |//  ||  |\\    Vol 2, Issue 4 - August 1991
  5.          R o u n d T a b l e
  6.  
  7.    Items of interest to participants of the GEnie Unix RoundTable
  8.  
  9.       The RoundTable SysOps are:
  10.       Dave Weinstein......OLORIN     Brian Riley.........DELPHI
  11.       Gary Smith..........GARS       Chris North-Keys....HARP
  12.       Rick Mobley.........LRARK    All Unix SysOps.....UNIXSYSOPS$
  13.    We strongly encourage you to contact any or all of us if you have -ANY-
  14.  comments or suggestions. This is -YOUR- RoundTable. We are here to make
  15.  your participation as pleasant and beneficial as possible.
  16.  
  17.  ED: editor notes - Chocolate Friendly Interface: 
  18.  --                 editorial note from Dave Weinstein
  19.  
  20.  Is there something about the Unix RoundTable that isn't quite right?
  21.  Or is Unix just driving you to distraction...
  22.      
  23.  While we hope that you'd write us at UNIXSYSOPS$ with any problems, comments
  24.  or suggestions, there is also another alternative...
  25.       
  26.  Unix RT Sysop Dave Weinstein will be participating in the Chocolate Pie
  27.  Throw at this year's FidoCon in Denver... So throw a pie for a good cause,
  28.  and fondly remember all the wonderful little things about Unix that were
  29.  so much fun to encounter for the first time!
  30.  --     
  31.        
  32.  Using the Korn Shell (ksh)     Using KSH made a LOT easier. Gary (GARS)
  33.  --------------------------
  34.    
  35.  Ron Heiby, moderator of mod.os.unix dusted off some old notes on using
  36.  the Korn Shell that have not aged a bit. ksh is gaining in popularity
  37.  so this piece is a definite keeper. Gary (GARS)
  38.  
  39.  If my records are complete, I posted the this article in December of
  40.  1986, while working for AT&T.  Then, with modifications in December of
  41.  1987, while working for Motorola.  Since then, Ksh-88 has been
  42.  released and I've seen quite a few articles asking to do lots of stuff
  43.  with the prompt string.  So, here it is again, modified for Ksh-88 a
  44.  bit and enhanced in some other minor ways.  If you are still using an
  45.  older version of Ksh, UPGRADE!  Enjoy!
  46.  
  47.  A while ago [from the perspective of someone writing in December of
  48.  1986], there were several messages posted to Usenet which showed ways
  49.  to include various information into a Korn Shell PS1 prompt.  I
  50.  thought that a number of these were real clever and incorporated them
  51.  into my own environment.
  52.  
  53.  Now that Motorola Microcomputer Division [now the Motorola Computer
  54.  Group] is selling the Korn Shell for our Delta Series of 68020-based
  55.  systems, I thought I'd share this generally.
  56.  
  57.  Relatively little here is my own invention, but I can no longer say
  58.  who had every idea.  I did put a lot of work into integrating
  59.  everything together so that it would all work in a coordinated
  60.  fashion.  The time stamp stuff is from Korn.  The "autoload" stuff
  61.  [originally used] for functions (pshd, popd, etc.) as well as the
  62.  original versions of those functions is from a Usenet article by Avi
  63.  E. Gross in 10/84.  [This has since been absorbed in slightly
  64.  different form into standard Ksh-88.]  I have made some readability
  65.  and efficiency enhancements to the originals, as well as merging them
  66.  into the rest of the stuff here.  I pulled out the large blocks of
  67.  comments in Avi's original to improve the performance in my running
  68.  copy and keep the original intact elsewhere so I can figure out what's
  69.  going on.  As to the prompt-resetting code, I know there were at least
  70.  three different people (plus me) who contributed to what is merged
  71.  together here, but I lost the original Usenet articles.  Thanks,
  72.  whoever you are.
  73.  
  74.  I've tried to put this is into a form that you can easily install into
  75.  your own environment.  I mostly did it to see if I could.  Since then,
  76.  it has proved useful enough for me to keep it as my normal
  77.  environment.
  78.  
  79.  One could easily turn up one's nose at all this, if one really likes the "$ "
  80.  prompt, as this is about as far from that as you can get.  The normal prompt
  81.  when logged in and in your home directory is:    host: hh:mm:ss [~]
  82.                          nn>
  83.  After "cd /usr/src/cmd/vi", it is:        host: hh:mm:ss [src/cmd/vi]
  84.                          nn>
  85.  After "pshd /usr", it is:            host: hh:mm:ss 1: [/usr]
  86.                          nn>
  87.  After "popd", it is back to:            host: hh:mm:ss [src/cmd/vi]
  88.                          nn>
  89.  After invoking a sub-shell (ksh):        host: hh:mm:ss [src/cmd/vi]
  90.                          nn>>
  91.  
  92.  The "host" is the output of the "uname" command.  I added the host
  93.  name to the prompt to make it more obvious to whom I was "talking" in
  94.  the face of "cu" and "rlogin" and windowing terminals.  The "nn" is
  95.  the ksh history number.  hh:mm:ss is the time.  As you can see, up to
  96.  the last three directories in your current directory are included.  If
  97.  you are in a subdirectory of your home directory, your home directory
  98.  path counts as a single directory and is represented with a tilde (~).
  99.  If you are using Shell Layers (shl), the layer name "foo" or number
  100.  "(n)" is displayed as part of the prompt, too.  If the uid of the user
  101.  is 0 (root), then a pound sign (#) is used instead of a greater-than
  102.  (>) to indicate nesting of sub-shells.  The prompt was split into two
  103.  lines because the escape sequences to highlight a non-zero return code
  104.  get counted as printable characters and so fewer characters from the
  105.  command you are entering are visible in the line.
  106.  
  107.  Good luck trying to change any of it without breaking something else.
  108.  I am currently running ksh "Version 11/16/88e".
  109.  
  110.  Even if you don't use this, it makes an interesting exercise to figure
  111.  out how everything works.  After doing so, you'll have a very good
  112.  understanding of ksh programming.
  113.  
  114.  Ron.
  115.  
  116.  --------- This goes in your .profile --------
  117.  #    environment for fancy prompt
  118.  export PSSHL PS1="!$ " FPATH=~/ksh
  119.  
  120.  -------- This goes in your $ENV file ---------
  121.  # All this good stuff needed for interactive shells only.
  122.  # Guard it with appropriate tests for better effeciency of startup.
  123.  # Here's a good example of this:
  124.  #    case "$-" in
  125.  #    *c*)    # Stuff for -c, command line shells goes here.
  126.  #        :
  127.  #        ;;
  128.  #    *)    # Stuff for for non -c, (interactive) shells.
  129.  #        :
  130.  #        ;;
  131.  #    esac
  132.  #
  133.  #        Set prompt string portion for Shell Layers layer.
  134.  TTY=$(tty)
  135.  if [ "$TTY" != "${TTY#*sxt}" -a "${SHDEPTH:-}" = ">" ]
  136.  then
  137.      export PSSHL=$PS1
  138.  fi
  139.  unset TTY
  140.  #
  141.  #        Set System name string for fancy prompt
  142.  UNAME=$(uname)
  143.  #
  144.  #        Set standout strings for fancy prompt
  145.  : ${SMSO:=$(tput smso)} ${RMSO:=$(tput rmso)}
  146.  #
  147.  #        Set up for time stamping
  148.  typeset -RZ2 _x1 _x2 _x3
  149.  let SECONDS=$(date '+3600*%H+60*%M+%S')
  150.  TIME='"${_d[(_x1=(SECONDS/3600)%24)==(_x2=(SECONDS/60)%60)==(_x3=SECONDS%60)]}$_x1:$_x2:$_x3"'
  151.  #
  152.  #        Define the replacement for the "cd" builtin
  153.  function ch {
  154.      if cd ${*:-''}
  155.      then
  156.          resetps1
  157.      else
  158.          return 1
  159.      fi
  160.  }
  161.  alias cd=ch    # make it easy to use
  162.  
  163.  function resetps1 {
  164.      typeset _dir=$PWD
  165.      typeset _dirt=${_dir#$HOME}    # directory tail
  166.      if [ "${_dirt}" != "${_dir}" ]
  167.      then
  168.          _dir="~${_dirt}"
  169.      fi
  170.      typeset front=${_dir%/*/*/*}
  171.      : ${front:=x}
  172.      case ${pushlevel:-0} in
  173.      0)    PS1="${UNAME}: ${TIME} ${PSSHL:-}${SMSO:-}\${?#0}${RMSO:-}[${_dir#$front/}]
  174.  !$SHDEPTH ";;
  175.      *)    PS1="${UNAME}: ${TIME} $pushlevel: ${PSSHL:-}${SMSO:-}\${?#0}${RMSO:-}[${_dir#$front/}]
  176.  !$SHDEPTH ";;
  177.      esac
  178.  }
  179.  # Functions related to push and pop routines
  180.  alias   dirs='echo "\t0: $PWD"' \
  181.      popd='echo "You have never pushed any levels.\nYou remain at $PWD."'
  182.  #
  183.  #        Check for uid 0 (root)
  184.  id=$(id)
  185.  id=${id#uid=}
  186.  id=${id%%\(*}
  187.  if [ id -eq 0 ]
  188.  then
  189.      export SHDEPTH=${SHDEPTH:-}'#'
  190.  else
  191.      export SHDEPTH=${SHDEPTH:-}'>'
  192.  fi
  193.  # Set special colors
  194.  case $TERM in
  195.  mskermc)
  196.      case $id in
  197.      0)    color=37 ;;
  198.      501)    color=31 ;;
  199.      *)    color=35 ;;
  200.      esac
  201.      SMSO="[41;33m" RMSO="[44;${color}m[1m"
  202.      unset color
  203.      ;;
  204.  tm229|tm229g)
  205.      case $id in
  206.      0)    color=33 ;;
  207.      501)    color=37 ;;
  208.      *)    color=35 ;;
  209.      esac
  210.      SMSO="[41;33m" RMSO="[40;${color}m[1m"
  211.      unset color
  212.      ;;
  213.  *)
  214.      ;;
  215.  esac
  216.  unset id
  217.  resetps1
  218.  
  219.  -------- This is ~/ksh/pshd, linked to ~/ksh/pshpwd and ~/ksh/poppwd  ---------
  220.  unalias popd dirs
  221.  integer pushlevel=0
  222.  
  223.  function pshd
  224.  {
  225.      dirsave[pushlevel]="$PWD"        # save the name of the current dir
  226.      promptsave[pushlevel]="$PS1"    # save the current prompt
  227.      if [ pushlevel = 0 ]
  228.      then                
  229.      pushprompt="$PS1"
  230.      fi
  231.      ch ${1:-$HOME} 2> /dev/null
  232.      case $? in
  233.        0)                # "cd" succeeded.
  234.      let pushlevel=pushlevel+1
  235.      pwd                # show the current directory
  236.      : ${2:+`ls -Fx $3 $4 $5 $6 $7 $8 $9 >/dev/tty`}
  237.      resetps1
  238.      ;;
  239.        *)                # "cd" failed
  240.      print "Can't change to $1, aborting"
  241.      return 1
  242.      ;;
  243.      esac
  244.  }                    # END of pshd
  245.  
  246.  function popd
  247.  {
  248.      integer levels=${1:-1}
  249.  
  250.      if (( pushlevel-levels>=0 ))
  251.        then
  252.      let pushlevel=pushlevel-levels
  253.        else
  254.      print "Can't pop that many levels. Your choices were:"
  255.      dirs
  256.      print "You are being returned to your original level"
  257.          let pushlevel=0
  258.      fi
  259.  
  260.      ch ${dirsave[$pushlevel]}
  261.      pwd            # show the user where they are.
  262.      : ${2:+`ls -Fx $3 $4 $5 $6 $7 $8 $9 >/dev/tty`}
  263.      PS1="${promptsave[$pushlevel]}"
  264.  }
  265.  
  266.  function dirs
  267.  {
  268.      integer level=$pushlevel
  269.      integer lowest=$level-${1:-$level}
  270.      if [ lowest -lt 0 ]
  271.      then
  272.          lowest=0
  273.      fi
  274.      print "    $level: $PWD"
  275.      while [ level -gt lowest ]
  276.      do
  277.      let level=level-1
  278.      print "    $level: ${dirsave[$level]}"
  279.      done
  280.      unset level lowest
  281.  }
  282.  
  283.  function pshpwd
  284.  {
  285.  print $PWD  "${@:-}" >~/.current-pwd
  286.  }
  287.  
  288.  function poppwd
  289.  {
  290.  print $(<~/.current-pwd)
  291.  }
  292.  
  293.  ---- start of pshd family documentation ----
  294.  # In brief, this routine is called in the form of:
  295.  #       . ~/ksh/psh-pop.ksh name arg1 arg2 arg3 ...
  296.  # and has to do the following:
  297.  #               - Unalias all five related alias names.
  298.  #               - Declare all five function bodies using those names.
  299.  #               - Run the function that invoked this file, using the provided
  300.  #                 arguments.
  301.  
  302.  # The first time one of these aliases is used, it needs to be "loaded". From
  303.  # then on, each one represents a loaded function, and runs smoothly. The
  304.  # advantages are that your .env is about a hundred lines smaller, and these
  305.  # functions are only defined when used.
  306.  
  307.  # The first three routines are used to maintain and examine a directory stack
  308.  # of traversals through the file system. They are:
  309.  #       pshd [directory] [ls-indicator] [ls-arg] [ls-arg] [ls-arg]
  310.  #       popd [levels]    [ls-indicator] [ls-arg] [ls-arg] [ls-arg]
  311.  #       dirs [levels]
  312.  
  313.  # These are different than other versions of pshd that have been posted to
  314.  # the net. Both pshd and popd have an optional first argument that tells
  315.  # which directory to go to, or how many levels to backtrack. If a second
  316.  # argument is specified (any string will do) then an "ls -C" is done after
  317.  # the action is completed. Any additional arguments are passed to ls. For
  318.  # example, "pshd /usr/spool/uucp l -l -a -t" will change the directory to
  319.  # /usr/spool/uucp and then do an "ls -C -l -a -t" to show full descriptions
  320.  # of all files in that directory in the orer that they were last changed.
  321.  # The "-C" argument is used to force our version of ls to columnate the
  322.  # output (even if it is going into a pipeline).
  323.  
  324.  # The next two routines are used to share information about the current
  325.  # directory # between two windows on a DMD/BLIT or just to save the value
  326.  # for later. Only one value is currently supported. They are:
  327.  #       pshpwd [additional text]
  328.  #       poppwd
  329.  # Poppwd is often used in constructs like "cp *.c `poppwd`"
  330.  
  331.  ----------------------------------- end ---------------------------
  332.  -- 
  333.  Ron Heiby mcdchg!heiby   Moderator: mod.newprod & mod.os.unix
  334.  
  335.  -- 
  336.  Ron Heiby, heiby@chg.mcd.mot.com    Moderator: comp.newprod
  337.  "Wrong is wrong, even when it helps you." Popeye
  338.  --
  339.     
  340.  CHANGING GEARS: Migrating from ms-dos to *nix
  341.  --------------
  342.     article from Rick Mobley (LRARK)
  343.         
  344.  FROM DOS TO UNIX
  345.  By Ricky Mobley, LRARK
  346.   
  347.  For those that wish to enter the exciting world of UNIX, sometimes refered to
  348.  as *NIX to cover XENIX and other derivatives, you will find that some of the
  349.  commands are very similar. You may even wonder which came first, the chicken
  350.  or the egg. UNIX dates back to the mid 60's, DOS can be thought of as a subset
  351.  of UNIX since it became popular in the early 70's. Some commands that are
  352.  similar would be 'type' which came from 'cat', short for concatanate, format
  353.  which still exists, 'dir' which is replaced by 'ls' and many others.
  354.     
  355.  The amazing and sometimes the part which tends to scare off the weak at heart
  356.  is the fact that "*NIX is a bottomless pit". That statement is true because of
  357.  the large number of manuals that come with a system. Many times a command will
  358.  also have the statement "see also" which will more than likely send you off to
  359.  another book. Before you know it, you have 5 or 6 manuals open and may still
  360.  not fully understand the command you are working with. Thats where the wizards
  361.  come in. It is sometimes best to ask someone that has been using *NIX for a 
  362.   while to get a Reader's Digest version without going fully into the manuals.
  363.  You must be careful with this approach as you might get the dreadful 'RTFM'
  364.  reply on the simple ones. I'll leave that one for you to figure out.
  365.      
  366.  I have been running *NIX for a long time, and since I left DOS, I have yet to
  367.  find one application that I couldn't mimic given the many many utilities that
  368.  *NIX comes with. Last count was somewhere around 200. Hows that for a rich
  369.  operating system?
  370.           
  371.  In order for you to appreciate the power of this O/S you will have to install
  372.  it and use it for a while. There are several good manuals available to get you
  373.  started, and of course, there is always the RT on Genie that is filled with 
  374.  knowledgable users of *NIX. Join in the fun and begin to tap the deep dark 
  375.  secrets of *NIX. I know you will enjoy it.
  376.     
  377.  Next time, I will go into more details of the O/S and what it has to offer the 
  378.  first time user.
  379.        
  380.  rick@lrark
  381.  -- 
  382.  
  383.  
  384.  MACAWK : Sub: awk, nawk, gawk, pcawk, macawk
  385.  ------
  386.     humorware from Mike Nolan (M.NOLAN)
  387.     
  388.  In the beginning, there was 'awk', written by the 3 authors whose initials
  389.  make up the name.  And AT&T looked at awk, and decided it was of no
  390.  consequence, which was good as it was distributed for free.
  391.     
  392.  And then it was said, "But awk needs improvement", and, yea, it came to
  393.  pass that there was a new awk, or nawk.  And AT&T looked at nawk and
  394.  decided it was good, which was bad because then it was bundled.
  395.      
  396.  And it came to pass in the halls of MIT that Richard Stallman said,
  397.  "Let programmers go forth and multiply, and let the fruits of their
  398.  labors be as free as the air, and let there be a new kernel, conceived
  399.  in liberty and dedicated to the proposition that all modifications are
  400.  charged for to support the FSF"  (oops, sorry, wrong text.)
  401.         
  402.  But it came to pass that there was a GNU day, and GNU software began
  403.  to arise like weeds in the vineyard, with an insidious copyleft to
  404.  make the source code a part of all distributions.  And thus was gawk,
  405.  a GNU version of awk, as opposed to the new version of awk, was born.
  406.       
  407.  And the God of programmers looked down upon these awk-ward days, and
  408.  declared that the three versions should be only partially compatible,
  409.  in keeping with the fabled towers of Babylon.
  410.          
  411.  And then the God of programmers declared, go forth and multiply, which
  412.  confused everyone, because forth had not yet been ported.  But there
  413.  arose a multitudes of awk-like programs, such as pcawk and macawk,
  414.  and to this day this awk-full multitude does continue to propogate,
  415.  but usually without support.
  416.        
  417.  I hope this clarifies things.
  418.  Michael Nolan
  419.  --       
  420.     
  421.  Op-Ed: Where Unix is going...
  422.  --------------------------
  423.    article from Dave Weinstein (OLORIN)
  424.      
  425.     A few years back, the Unix community was buzzing with rumors and
  426.  speculation over the announcement that a number of companies which had
  427.  formerly specialized in extremely proprietary systems had formed a
  428.  consortium to create an "Open Unix". Against OSF was the Sun/AT&T
  429.  alliance, and flames and rampant speculation about what all of this
  430.  would mean for the future of Unix systems were the rage.
  431.       
  432.    Well, it's been a few years, and it's hard to remember why the furor
  433.  rose. OSF has been mostly silent (although Motif has become a standard of
  434.  sorts), and the spectre of a Sun/AT&T monopoly seems to have disappeared
  435.  as SPARC based Unix clones arrived on the market from many of the same
  436.  forces which flourished in the PC Clone market.
  437.       
  438.    And now a whole new slew of rumors and speculation have arisen over the
  439.  falling out between Microsoft and IBM, the ACE Consortium, and the new
  440.  and highly touted Apple/IBM/Motorola alliance.
  441.          
  442.    So why does the (primarily) PC infighting of the past month affect
  443.  Unix? Far more companies have Unix capable PCs than have dedicated
  444.  Unix machines of any stripe. And the decision to use Windows, X, the Mac,
  445.  or any number of systems is no longer one of the scale of the problem,
  446.  but which system provides the environment which will be productive
  447.  quickly. It isn't the technical expertise which wins this war, but the
  448.  marketing, and Unix is facing stronger threats now than in recent years.
  449.  Early reports of OS/2 2.0 make it a true player in the office environment,
  450.  and the cost of comparable Unix systems (as well as resource drain) is
  451.  much higher. The Unix vendors can no longer afford to price full blown
  452.  implementations at $500-$1200, the high end PCs and PC specific platforms
  453.  are pushing hard into the Workstation market...
  454.  --           
  455.          
  456.  CUSTOMIZING the User Agent :
  457.  --------------------------
  458.   Brian Riley (DELPHI) continues his excellent 'hands-on' setup of a
  459.   Unix system User Agent, using the venerable 3b1 as his model.
  460.      
  461.                    Customizing the User Agent (tm)
  462.                          on the Unix Pc (tm)
  463.                           by Brian T. Riley
  464.                                Part 4
  465.    
  466.       
  467.          Well, here we are again. If you remember last time, we
  468.  were having fun with our .profile's. I promised to explain the
  469.  rest of mine. Ok, Here we go! :)
  470.  
  471.  -----------------------------------------
  472.  
  473.  #sccs     "@(#)install:.profile    1.3"
  474.  
  475.  set -amh -o vi
  476.  umask 000
  477.  VISUAL=/usr/bin/vi
  478.  PCOMM=$HOME/Pcomm
  479.  ROGUEOPTS="name=Delphi"
  480.  ENV=$HOME/.kshrc
  481.  HISTFILE=$HOME/.ksh.hist
  482.  HISTSIZE=24
  483.  > $HISTFILE
  484.    
  485.    
  486.  if [ "$L0" != "u" ]
  487.  then
  488.            exec /usr/bin/ua
  489.  fi
  490.      
  491.  -----------------------------------------
  492.    
  493.          The first line should look familiar. It does this;
  494.     
  495.       
  496.  -a      allexport       Exports all variables when set.
  497.     
  498.  -m      monitor         Displays process # for bg jobs.
  499.       
  500.  -h      trackall        Makes aliases tracked.
  501.       
  502.  -o vi   sets vi editing mode for command line.
  503.       
  504.     
  505.          The rest is as follows;
  506.    
  507.  Umask sets the file creation mode mask. The value after the
  508.  command is subtracted from the system default mode value. On the
  509.  Unix-pc, without this command, the default mode is 0644. With the
  510.  command I get 0755. VISUAL= makes vi the default editor no matter
  511.  what the EDITOR= value. This way I can set the EDITOR= variable
  512.  to another value for programs that ignore the VISUAL= variable
  513.  and still have vi for the rest. PCOMM= tells Pcomm the
  514.  communications program where my configuration files are and
  515.  ROGUEOPTS= sets default options when I play the game. These are
  516.  two examples of how programers can get information into their
  517.  programs while giving the user flexibility.
  518.      
  519.  ENV= tells the Korn shell two things, first it says that we are
  520.  using an environment file for the bulk of our aliases and
  521.  functions and second it tells the shell where it is. By
  522.  separating the aliases and functions from our .profile, and since
  523.  it is a shell file, it is more readable and we can make changes
  524.  without logging off. HISTFILE= and HISTSIZE= tell the shell where
  525.  our history file is and how many of the previous commands we want
  526.  to be able to recall. The next line is a little lesson in
  527.  redirection. It has the effect of emptying my history file every
  528.  time I log in.
  529.       
  530.  The last part we covered last time and lets me start without the
  531.  User Agent if I put a "u" after my name when I log in. Did you
  532.  notice the "$HOME" in some of my variable names? Ksh
  533.  automatically expands this to the path of your home directory.
  534.  This is available anywhere in the shell, even when you are
  535.  changing your current directory. You could do this;
  536.       
  537.  cd $HOME/newdir
  538.       
  539.          Any of you who got them all right, give yourself a pat on
  540.  the back but don't pull a muscle doing it! :) The Korn shell has
  541.  some other interesting features as well. Say for example you are
  542.  using your system at work and you are using a program that was
  543.  written by your company for accounting. But today the program
  544.  doesn't work, and you want to check it for problems but you don't
  545.  know where it is! After all the system has hundreds of commands
  546.  and programs. Well, you could ask everyone in the office where it
  547.  is, (but you would look kind of stupid) or you could use
  548.  "whence", like this;
  549.    
  550.  whence command <ret>
  551.     
  552.          which will tell you the full path to the program. You
  553.  could also use the -v option to tell you what type of command or
  554.  program it is. These are the possibilities;
  555.       
  556.  Reserved word
  557.  Alias
  558.  Exported alias
  559.  Built-in shell command
  560.  Undefined function
  561.  Function
  562.  Tracked alias
  563.  Program
  564.  Not found
  565.             
  566.          Well that's all I have for this installment but I would
  567.          like you to post suggestions in the BBS for things you
  568.          would like to know about and I will do what I can to
  569.          answer your questions. Till next time...
  570.         
  571.  Happy trails to you....
  572.     
  573.       Brian T. Riley
  574.       Delphi@UnixRt
  575.       brian@jerimy.snide.com
  576.  --
  577.      
  578.  ---------------    
  579.     REMINDER - This newsletter is being sent to you 'by request'. If you do
  580.  not wish to keep receiving it, e-mail a stop notice to GARS. On the other
  581.  hand, we would very much appreciate it if you would pass the word that we
  582.  do distribute this item near the tenth (10th) of the month of issue to any-
  583.  one on GEnie who requests it, and will gladly add any name that is requested
  584.  via the same route... e-mail to GARS.
  585.    P L E A S E  also remember contributions are most welcome. Please e-mail
  586.  items and/or suggestions to GARS.
  587.  
  588.  (EOF)
  589.  
  590.   Trademark and Copyright notices:
  591.   Unix is a Trademark of UNIX System Laboratories, Inc.; GEnie, LiveWire, and
  592.   RoundTable are Trademarks of General Electric Information Services  Company;
  593.   Xenix and ms-dos are Trademarks of Microsoft  Corporation;
  594.  The contents of this newsletter are copyright (c) 1991 and may be copied whole
  595.  or in part only if  original  credit is included. The GEnie UNIX RoundTable is
  596.  not affiliated with AT&T or UNIX System Laboratories, Inc.
  597.